package com.hero.content.controller;

import com.hero.content.model.dto.CoursePreviewDto;
import com.hero.content.service.CoursePublishService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

/**
 *  课程预览，发布
 */
@Controller
public class CoursePublishController {

    // 这个类是一个临时性的类
    // 后期真正的流程是:
    // 当某个机构发布了课程 我们要生成课程的详情页面(静态页面)
    // 把这个静态页面保存到MINIO中 当机构点击预览课程的时候 直接从MINIO中找到这个页面进行展示

    @Autowired
    private CoursePublishService coursePublishService;

    /**
     * 根据课程id查询课程详情页面
     * @param courseId 课程id
     */
    @GetMapping("/coursepreview/{courseId}")
    public ModelAndView preview(@PathVariable("courseId") Long courseId) {
        // 调用Service 根据id查询课程详情
        CoursePreviewDto coursePreviewInfo = coursePublishService.getCoursePreviewInfo(courseId);

        // model 是Request域对象
        // view  要跳转的资源/页面名称
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("model", coursePreviewInfo);
        modelAndView.setViewName("course_template");
        return modelAndView;
    }


    /**
     * 提交审核接口
     */
    @ResponseBody
    @PostMapping("/courseaudit/commit/{courseId}")
    public void commitAudit(@PathVariable("courseId") Long courseId) {
        // 调用Service 实现课程审核
        coursePublishService.commitAudit(courseId);
    }

    /**
     * 课程审核通过/审核失败
     * @param courseId    课程ID
     * @param successType 成功/失败 0 失败 1 成功
     */
    @ResponseBody
    @PostMapping("/courseaudit/audit/{courseId}/{successType}")
    public void auditCourse(@PathVariable("courseId") Long courseId,
                            @PathVariable("successType") Integer successType) {
        // 调用Service 实现课程审核结果的保存
        coursePublishService.auditCourse(courseId, successType);
    }

    /**
     * 课程发布接口
     */
    @ResponseBody
    @PostMapping("/coursepublish/{courseId}")
    public void coursepublish(@PathVariable("courseId") Long courseId) {
        coursePublishService.publish(courseId);
    }
}
